package my.study.designpattern.decorator.example1;

public class Main {

	/**
	 * 该模式以对客户端透明的方式扩展对象的功能
	 * 抽象构件角色：定义一个抽象接口，来规范准备附加功能的类。
	 * 具体构件角色：将要被附加功能的类，实现抽象构件角色接口。
	 * 抽象装饰者角色：持有对具体构件角色的引用并定义与抽象构件角色一致的接口。
	 * 具体装饰角色：实现抽象装饰者角色，负责为具体构件添加额外功能。
	 */
	/*
	 * 优点:	
	 * 1）提供比继承更多的灵活性 
	 * 2）使用不同的装饰组合可以创造出不同行为的组合 
	 * 3）需要的类的数目减少
	 * 缺点：
	 * 1）灵活性带来比较大的出错性 
	 * 2）产生更多的对象，给查错带来困难
	 */
	public static void main(String[] args) {
		InterfaceComponent component = new Component();
		AbstractDecorator d1 = new DecoratorOne(component);
		d1.say();
		AbstractDecorator d2 = new DecoratorTwo(component);
		d2.say();
	}

}
